package com.cy.pj.common.web;


import com.cy.pj.common.exception.ServiceException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;


/**
 *  程序运行时出现的任何异常, 最终都会通过该异常处理类来处理出现的问题
 */

//↓ @ControllerAdvice : 该注解描述的类为全局类型的异常处理类
//  @ResponseBody : 返回类型不是view类型
/*@ControllerAdvice + @ResponseBody = @RestControllerAdvice*/
@RestControllerAdvice
public class GlobalExceptionHandler {

    /*框架中异常处理的流程:
    *  1. 程序运行出现异常时, 现将异常传递给DispatcherServlet对象,
    *  2. DispatcherServlet对象在捕获异常后, 与该异常类中的异常方法进行比对
    *  3. 找到对应的异常处理方法,然后执行相关操作
    * */

//    @ExceptionHandler 表示异常处理方法,()中为处理的异常类型, 一般和下面的参数一致
    /*优先级: try-catch >> 内部异常处理方法 >> 外部异常处理类*/
//    算数异常
    @ExceptionHandler(ArithmeticException.class)
    public String doHandleArithmeticException(ArithmeticException e){
        return "the exception msg is " + e.getMessage();
    }

//
    @ExceptionHandler(ServiceException.class)
    public String ParamSmallThanZero(ServiceException e){
        return "the exception msg is " + e.getMessage();
    }

//    RunTimeException 为总得异常,  出现上述异常之外时, 通过该方法来处理
    @ExceptionHandler(RuntimeException.class)
    public String doHandleRuntimeException(RuntimeException e){
        //log.error()
        //给运维发短信
        //发email
        //播放音乐 等功能
        return "运行时异常 : " + e.getMessage();

    }


    @ExceptionHandler(Throwable.class)
    public String doHandleThorwable(Throwable e){
        return e.getMessage() + "爷管不了了";
    }



}
